package com.example.designpatterns.iterator.concrete;

import com.example.designpatterns.iterator.Aggregate;
import com.example.designpatterns.iterator.Iterator;

/**
 * 图书集合 - 具体聚合类
 * 使用数组存储图书并提供创建迭代器的方法
 */
public class BookCollection implements Aggregate<Book> {
    private Book[] books;
    private int lastIndex = 0;
    
    /**
     * 创建指定大小的图书集合
     * @param size 图书集合的最大容量
     */
    public BookCollection(int size) {
        this.books = new Book[size];
    }
    
    /**
     * 添加图书到集合中
     * @param book 要添加的图书
     * @return 添加成功返回true，如果集合已满则返回false
     */
    public boolean addBook(Book book) {
        if (lastIndex < books.length) {
            books[lastIndex] = book;
            lastIndex++;
            return true;
        }
        return false;
    }
    
    /**
     * 获取指定索引位置的图书
     * @param index 索引位置
     * @return 图书对象，如果索引越界返回null
     */
    public Book getBookAt(int index) {
        if (index < lastIndex && index >= 0) {
            return books[index];
        }
        return null;
    }
    
    /**
     * 获取图书集合中的图书数量
     * @return 当前图书数量
     */
    public int getLength() {
        return lastIndex;
    }
    
    @Override
    public Iterator<Book> createIterator() {
        return new BookIterator(this);
    }
    
    /**
     * 创建只返回指定类别图书的迭代器
     * @param category 图书类别
     * @return 过滤后的迭代器
     */
    public Iterator<Book> createCategoryIterator(String category) {
        return new CategoryIterator(this, category);
    }
} 